package org.study.jdbc.boot.util;

import java.sql.*;

/**
 * 参考 https://www.liaoxuefeng.com/wiki/1252599548343744/1321748435828770
 *
 * @author Administrator
 * @date 2022-11-01
 */
public class JdbcUtils {
    private JdbcUtils() {
        throw new AssertionError("不能实例化工具类");
    }

    static {
        try {
            // 通过反射加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取数据库连接
     *
     * @param dbName   数据库名称
     * @param username 用户名
     * @param password 密码
     * @return java.sql.Connection
     */
    public static Connection getConnection(String dbName, String username, String password) {
        try {
            String url = "jdbc:mysql://127.0.0.1:3306/" + dbName + "?useUnicode=true&characterEncoding=UTF8&useSSL=true&serverTimezone=Asia/Shanghai";
            return DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("获取数据库连接异常");
        }
    }

    /**
     * 获取数据库连接
     *
     * @param host     数据库服务器ip
     * @param port     数据库服务器端口号
     * @param dbName   数据库名称
     * @param username 用户名
     * @param password 密码
     * @return java.sql.Connection
     */
    public static Connection getConnection(String host, int port, String dbName, String username, String password) {
        try {
            String url = "jdbc:mysql://" + host + ":" + port + "/" + dbName + "?useUnicode=true&characterEncoding=UTF8&useSSL=true&serverTimezone=Asia/Shanghai";
            return DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            throw new RuntimeException("获取数据库连接异常");
        }
    }

    /**
     * 关闭数据库连接
     *
     * @param conn 数据库连接
     */
    public static void close(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
